Memorial Descritivo e Levantamento Topográfico no Dabukuri App
Cassiano Gatto
Neste tutorial proponho um protocolo e algumas ideias gerais para gerar dois documentos de geo-referenciamento necessários para atividades de regularização territorial no âmbito do projeto Direito ao Território (Humanitas FAPEAM). O protocolo prevê o uso de dois programas de código aberto:
QGIS para fazer a representação espacial geo-referenciada dos lotes, que inclui o desenho de polígonos e extração de pontos extremos, distâncias, áreas e figuras;
o app baseado em R e Shiny que desenvolvi para usar templates RMarkdow para gerar os documentos em formato HTML (que podem ser impressos em PDF através do seu browser).
Mesmo que haja variação no tipo de terreno e processo de legalização, os lotes individuais devem ser sempre mapeados e ter suas características espaciais documentadas apropriadamente. Aqui faremos a representação espacial destes terrenos em formato vetorial, extrairemos os dados destas representações e com esses dados produziremos tanto o Memorial Descritivo quanto o Levantamento Topográfico (Figura 1).
Figura 1. Documentos: Memorial descritivo e Levantamento topográfico
Começaremos com o programa de geo-referenciamento, cruzando os pontos obtidos em campo com imagens de satélite ou drone para desenhar, um a um, os lotes, os caminhos, as áreas verdes, áreas de perigo, e as áreas comuns da comunidade.
Exporte seus pontos de referência de campo coletados na comunidade e salve como um objeto .shp; dê um zoom para a camada carregada no QGIS.
Se você não tiver todos os exatos pontos de interesse coletados, abra uma imagem georeferenciada de sobrevôo de avião ou drone, ou uma base de imagens georreferenciadas atual que mostre os lotes em estudo (e.g. Navegador/ XYZ Tiles/ Google, OpenStreetMap, etc). Assim é possível ‘desenhar’ todos os lotes e áreas de interesse (mesmo sem ter todos os pontos) com base na imagem de background. Esta imagem também é importante para verificar a validade dos pontos coletados.
Para fazer o esquema espacial dos lotes crie uma nova camada vetorial de polígono (Camada/ Criar nova camada/ Nova camada shapefile -> escolha o nome, e.g. tutorial_lotes.shp). Use as configurações UTF-8, polígono, CRS epsg 4326 WGS84 (graus) ou epsg 3857 WGS84 PseudoMercator (metros, ou qualquer CRS de sua preferência) e inclua os campos (colunas na tabela) nesta ordem (veja a Figura 2): id (Integer), comunidade, rua, casa, nome, cpf (todas String).
Figura 2. Criando polígono vetorial no QGIS
Figura 3. Habilite a edição vetorial no QGIS
Figura 4. Desenho do primeiro polígono e formulário de atributos
Se você for completar e expandir um shapefile já existente (e sua respectiva tabela, por exemplo aqui), basta habilitar a edição da mesma forma e continuar desenhando os polígonos e preenchendo a tabela nesta nova comunidade.
É sempre bom lembrar que todas as informações necessárias para que os templates dos documentos possam ser preenchidos são obtidos da tabela, que é a fonte de dados dos proprietários, de endereço, dos pontos demarcadores dos terrenos, do comprimento dos lados, área (Figura 5), e também o identificador referencial para nomear e chamar as figuras que criaremos a seguir. No modo edição a tabela pode ser editada - lembre-se sempre de salvar as alterações e sair do modo de edição para evitar acidentes.
Figura 5. Tabela de atributos
Ainda com o modo de edição ativado, pode-se calcular o perímetro e área total dos lotes. Para isso utilizaremos a calculadora (ícone do ábaco Ctrl-I) no painel e na tabela (Figura 6). Nela criamos uma nova coluna (Integer ou Float), damos o nome de area e aplicamos a fórmula $area; repetir o procedimento para perímetro com o nome perim e a fórmula $perimeter.
Figura 6. Calculadora (ícone em azul) para criar novo campo com valor calculado de area; a função está sublinhada.
Figura 7. Tabela atualizada com campos area e perim.
Cada polígono é baseado em pontos ligados por segmentos. Neste ponto utilizaremos a ferramenta de extração de vértices de polígonos e que cria uma nova tabela na qual cada ponto é representado por uma linha (Figura )
Figura . Extrair vértices dos polígonos
É importante ressaltar que a ordem de construção dos pontos (marcos) do polígono é recuperada pela ferramenta de extração: o primeiro ponto é identificado pela coluna vertex_ind como 0, o segundo como 1, o terceiro como 2, etc. Assim, para seguir o padrão de numeração dos extremos, que é o ponto 1 na frente à esquerda, o ponto 2 na frente à direita, o ponto 3 nos fundos à direita e o ponto 4 nos fundos à esquerda (Figura ), com a tabela vertices com seu modo de edição habilitado, criamos uma coluna chamada ponto e nomeamos os 4 extremos de 1 a 4. Para isso deve-se usar o calculador e aplicar a fórmula “vertex_ind” + 1 para uma nova coluna chamada “ponto” (Figura ).
Figura . Esquema de orientação dos pontos (marcos) no terreno
Figura . Renomear os pontos por calculador
Para melhor visualizar os pontos pode-se habilitar rótulos com identificação de cada ponto (em propriedades da tabela -> Rótulos - Figura 9) e também por cores (Simbologia - Figura 10)
Figura 9. Configurar rótulos dos pontos
Figura 10 . Classificar os pontos por cores na aba “Simbologia”
Nesta altura devemos checar a tabela de pontos (Figura 11). Para isso basta clicar com o botão direito sobre a camada (neste caso tutorial vértices e clicar “Abrir tabela de atributos”).
Figura 11. Tabela de atributos dos pontos criados
Agora vamos usar a calculadora do QGIS para escrever as coordenadas geográficas de cada ponto (Figura 12). A calculadora é uma ferramenta que permite diversos tipos de manipulação da tabela de atributos. Uma das funções é a extração de valores espaciais de cada linha da tabela. Para calcular a longitude ‘x’ de cada ponto, por exemplo, deve-se:
Abrir o modo de edição (lápis; em amarelo na figura)
Clicar no ícone do calculador (ábaco; em vermelho)
Na calculadora escolher a opção “criar um novo campo” (em verde), escolher um nome auto-explicativo para o novo campo (‘x_long’, por exemplo), e escolher a opção ‘Texto(string)’, já que utilizaremos um formato de coordenada não numérico (não faremos análises).
No campo de ‘expressão’ (em roxo) digitaremos a fórmula responsável por gerar a informação que necessitamos. Neste caso queremos ‘$x’, ou seja, a coordenada x para cada linha, que transformaremos para o formato desejado com o comando ‘to_dms’ (para grau, minuto, segundo), escolhendo o número de casas decimais e o formato final com W/E ou N/S (‘suffix’).
Pode-se verificar o resultado final para cada linha embaixo do campo de expressão (azul).
Figura 12. Extração de coordenadas com calculador de atributos
O próximo passo é transformar a tabela para que cada terreno seja representado em apenas uma linha na qual cada ponto seja uma coluna diferente.
Figura . Eita
Para gerar o ‘Memorial Descritivo’ e o ‘Levantamento Topográfico’, abaixo, é utilizada
This is an R Markdown document themed with {bslib}
package. {bslib} makes it easy to customize the main
colors and fonts of a html_document, flexdashboard::flex_dashboard,
shiny::fluidPage(),
or more generally any website that uses Bootstrap for styling. The
theme parameter in the yaml front-matter of this Rmd
document describes a bslib::bs_theme()
object, which provides access to 100s of theming
options (via its ... argument) in addition to the main
options demonstrated here (e.g., bg, fg,
primary, etc).
This particular example uses {bslib}’s default Bootstrap
version (which, at the time of writing, is Bootstrap 5). However, if
reproducibility is important, it’s recommended that you “lock-in” the
version by adding version: 5 to the theme
definition.
When running this document with {thematic}
installed, the thematic::thematic_rmd(font = "auto")
effectively translates theme (CSS) settings to new global
theming defaults for {ggplot2}, {lattice}, and
{base} R graphics:
library(ggplot2)
ggplot(mpg, aes(displ, hwy)) +
geom_point() + geom_smooth()
## Error : The fig.showtext code chunk option must be TRUE
## `geom_smooth()` using method = 'loess' and formula = 'y ~ x'
lattice::show.settings()
## Error : The fig.showtext code chunk option must be TRUE
plot(pressure, col = thematic::thematic_get_option("accent"))
## Error : The fig.showtext code chunk option must be TRUE